// 第二题
const fp = require('loadsh/fp')

const cars = [{
  name: 'Ferrari FF',
  horsepower: 660,
  dollar_value: 700000,
  in_stock: true
}, {
  name: 'Spyker C12 Zagato',
  horsepower: 650,
  dollar_value: 648000,
  in_stock: false
}, {
  name: 'Jaguar XKR-S',
  horsepower: 550,
  dollar_value: 132000,
  in_stock: false
}, {
  name: 'Audi R8',
  horsepower: 528,
  dollar_value: 114200,
  in_stock: false
}, {
  name: 'Aston Martin One-77',
  horsepower: 750,
  dollar_value: 1850000,
  in_stock: true
}, {
  name: 'Pagani Huayra',
  horsepower: 700,
  dollar_value: 1300000,
  in_stock: false
}]

// 练习一
// 思路
// 先使用fp.last取最后一条数据，在使用fp.prop取对象的属性，由于fp.prop需要两个参数，我们需要使用fp.curry来对fp.prop进行柯里化变成单一参数
let getLastInStock = fp.flowRight(fp.curry(fp.prop)('in_stock'), fp.last)
let lastInStock = getLastInStock(cars)
console.log(lastInStock)

// 练习二
// 思路和上面的类似
let getFirstCarName = fp.flowRight(fp.curry(fp.prop)('name'), fp.first)
let firstCarName = getFirstCarName(cars)
console.log(firstCarName)


// 练习三
// 这道题主要是求所有车价格的平均值，主要思路是，先取所有的价格，在使用_average函数进行求平均值
let _average = function (xs) {
  return fp.reduce(fp.add, 0, xs) / xs.length
}

let averageDollarValue = fp.flowRight(_average, fp.curry(fp.map((car) => car.dollar_value)))
let average = averageDollarValue(cars)
console.log(average)

// 联系四
// 思路：传入参数为需要转换的数组，为了方便操作，先将数组转化为字符串，然后转化为小写英文字母，在将空格转化为_，最后重新变成数组
let _undersocre = fp.replace(/\W+/g, '_')
let sanitizeNames = fp.flowRight(fp.curry(fp.split(',')), _undersocre, fp.toLower, fp.curry(fp.join(',')))
console.log(sanitizeNames(['Hello World']))